# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-libs/nss/nss-3.12.2_rc1.ebuild,v 1.1 2008/12/11 10:39:04 armin76 Exp $

inherit eutils flag-o-matic multilib toolchain-funcs

NSPR_VER="4.7.3"
RTM_NAME="NSS_${PV//./_}_RTM"
DESCRIPTION="Mozilla's Network Security Services library that implements PKI support"
HOMEPAGE="http://www.mozilla.org/projects/security/pki/nss/"
#SRC_URI="ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/${RTM_NAME}/src/${P}.tar.gz"
SRC_URI="http://dev.gentoo.org/~armin76/dist/${P}.tar.bz2
	mirror://gentoo/${P}.tar.bz2"

LICENSE="|| ( MPL-1.1 GPL-2 LGPL-2.1 )"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd"
IUSE="utils multilib"

EMULTILIB_PKG="true"

S="${WORKDIR}"

DEPEND=">=dev-libs/nspr-${NSPR_VER}
	>=dev-db/sqlite-3.6.2"

pkg_setup() {
    # try to turn off distcc and ccache for people that have a problem with it
    export DISTCC_DISABLE=1
    export CCACHE_DISABLE=1
}

setup_env() {
    # workaround for users having FEATURES=ccache set, as ccache doesn't, play
    # nice to multilib builds (see bug 206822)
    filter-flags -DABI=*
    append-flags -DABI=${ABI}
}

src_unpack() {
    for ABI in $(get_install_abis); do
        einfo "Unpacking for ABI ${ABI}"
        cd "${S}"
        ABI=${ABI:-default}
        mkdir abi-${ABI}
        cd abi-${ABI}

        unpack ${A}

        cd "${S}"/abi-${ABI}/mozilla/security/coreconf
        # hack nspr paths
        echo 'INCLUDES += -I/usr/include/nspr -I$(DIST)/include/dbm' \
            >> headers.mk || die "failed to append include"

        # cope with nspr being in /usr/$(get_libdir)/nspr
        sed -e 's:$(DIST)/lib:/usr/'"$(get_libdir)"/nspr':' \
            -i location.mk

        # modify install path
        sed -e 's:SOURCE_PREFIX = $(CORE_DEPTH)/\.\./dist:SOURCE_PREFIX = $(CORE_DEPTH)/dist:' \
            -i source.mk

        # Respect LDFLAGS
        sed -i -e 's/\$(MKSHLIB) -o/\$(MKSHLIB) \$(LDFLAGS) -o/g' rules.mk

        cd "${S}"/abi-${ABI}
        epatch "${FILESDIR}"/${PN}-3.11-config.patch
        epatch "${FILESDIR}"/${PN}-3.12-config-1.patch
        epatch "${FILESDIR}"/${PN}-mips64-2.patch
    done
}

src_compile() {
    if [[ -z ${OABI} ]] && has_multilib_profile; then
        strip-flags
        einfo "Building multilib ${PN} for ABIs: $(get_install_abis)"
        OABI=${ABI}
        for ABI in $(get_install_abis); do
            export ABI=${ABI}
            src_compile
        done
        ABI=${OABI}
        return
    fi

    ABI=${ABI:-default}
    
    setup_env

	case ${ABI} in
        *amd64*) export USE_64=1;;
        *) ;;
	esac
    einfo "Compiling for ABI ${ABI}"
	export NSDISTMODE=copy
	export NSS_USE_SYSTEM_SQLITE=1
	export NSS_ENABLE_ECC=1
	cd "${S}"/abi-${ABI}/mozilla/security/coreconf
	emake -j1 BUILD_OPT=1 XCFLAGS="${CFLAGS}" CC="$(tc-getCC)" || die "coreconf ABI ${ABI} make failed"
    cd "${S}"/abi-${ABI}/mozilla/security/dbm
    emake -j1 BUILD_OPT=1 XCFLAGS="${CFLAGS}" CC="$(tc-getCC)" || die "dbm ABI ${ABI} make failed"
    cd "${S}"/abi-${ABI}/mozilla/security/nss
    emake -j1 BUILD_OPT=1 XCFLAGS="${CFLAGS}" CC="$(tc-getCC)" || die "nss ABI ${ABI} make failed"
}

src_install () {
    MINOR_VERSION=12
    
    NSS_VMAJOR=`cat ${S}/abi-${DEFAULT_ABI}/mozilla/security/nss/lib/nss/nss.h | grep "#define.*NSS_VMAJOR" | awk '{print $3}'`
    NSS_VMINOR=`cat ${S}/abi-${DEFAULT_ABI}/mozilla/security/nss/lib/nss/nss.h | grep "#define.*NSS_VMINOR" | awk '{print $3}'`
    NSS_VPATCH=`cat ${S}/abi-${DEFAULT_ABI}/mozilla/security/nss/lib/nss/nss.h | grep "#define.*NSS_VPATCH" | awk '{print $3}'`
    
    dodir /usr/bin
    dodir /etc/env.d
    
    cp "${FILESDIR}"/3.12-nss-config.in "${D}"/usr/bin/nss-config
    
    for ABI in $(get_install_abis); do
        einfo "Installing for ABI ${ABI}"
        ABI=${ABI:-default}
        cd "${S}"/abi-${ABI}/mozilla/security/dist

        # put all *.a files in /usr/lib/nss (because some have conflicting names
        # with existing libraries)
        dodir /usr/$(get_libdir)/nss
        cp -L */lib/*.so "${D}"/usr/$(get_libdir)/nss || die "copying shared libs for ABI ${ABI} failed"
        cp -L */lib/*.chk "${D}"/usr/$(get_libdir)/nss || die "copying chk files for ABI ${ABI} failed"
        cp -L */lib/*.a "${D}"/usr/$(get_libdir)/nss || die "copying libs for ABI ${ABI} failed"

        cd "${D}"/usr/$(get_libdir)/nss
        for file in *.so; do
            mv ${file} ${file}.${MINOR_VERSION}
            ln -s ${file}.${MINOR_VERSION} ${file}
        done
        
        dodir /usr/$(get_libdir)/pkgconfig
        cp "${FILESDIR}"/3.12-nss.pc.in "${D}"/usr/$(get_libdir)/pkgconfig/nss.pc
        
        # coping with nss being in a different path. We move up priority to
        # ensure that nss/nspr are used specifically before searching elsewhere.
        echo "LDPATH=/usr/$(get_libdir)/nss" > "${D}"/etc/env.d/08nss-${ABI}
        
        if [[ ${ABI} == ${DEFAULT_ABI} ]]; then
            cd "${S}"/abi-${ABI}/mozilla/security/dist
            # all the include files
            insinto /usr/include/nss
            doins private/nss/*.h
            doins public/nss/*.h

            sed -e "s,@libdir@,/usr/"$(get_libdir)"/nss,g" \
                -e "s,@prefix@,/usr,g" \
                -e "s,@exec_prefix@,\$\{prefix},g" \
                -e "s,@includedir@,\$\{prefix}/include/nss,g" \
                -e "s,@MOD_MAJOR_VERSION@,$NSS_VMAJOR,g" \
                -e "s,@MOD_MINOR_VERSION@,$NSS_VMINOR,g" \
                -e "s,@MOD_PATCH_VERSION@,$NSS_VPATCH,g" \
                -i "${D}"/usr/bin/nss-config
            chmod 755 "${D}"/usr/bin/nss-config

            if use utils; then
                cd "${S}"/abi-${ABI}/mozilla/security/dist/*/bin/
                for f in *; do
                    newbin ${f} nss${f}
                done
            fi
        fi

        sed -e "s,@libdir@,/usr/"$(get_libdir)"/nss,g" \
              -e "s,@prefix@,/usr,g" \
              -e "s,@exec_prefix@,\$\{prefix},g" \
              -e "s,@includedir@,\$\{prefix}/include/nss," \
              -e "s,@NSPR_VERSION@,`nspr-config --version`,g" \
              -e "s,@NSS_VERSION@,$NSS_VMAJOR.$NSS_VMINOR.$NSS_VPATCH,g" \
              -i "${D}"/usr/$(get_libdir)/pkgconfig/nss.pc
        chmod 644 "${D}"/usr/$(get_libdir)/pkgconfig/nss.pc
    done
}
